#ifndef DEVPARAMSWIDGET_H
#define DEVPARAMSWIDGET_H

//Библиотека Qt.
#include <QWidget>
#include <QPointer>


//Внутренняя библиотека.
#include "viddevice.h"


//Объявление внешних классов.
class DevManager;
class QComboBox;
class QProgressBar;
class QSlider;
class QToolButton;
class QGroupBox;


class DevParamsWidget : public QWidget
{
	Q_OBJECT
signals:
	void information(const QString &msg);
	void warning(const QString &msg);
	void critical(const QString &msg);

public:
	//Конструктор.
	DevParamsWidget(DevManager *devmanager, QWidget *parent = NULL, Qt::WindowFlags f = 0);

	//Деструктор.
	virtual ~DevParamsWidget() {}

	//Функция очистки виджетов.
	void clearWidgets();

private:
	//Менеджер устройств.
	DevManager *devManager;

	QComboBox *inputCBox;
	QComboBox *standardCBox;
	QComboBox *pixfmtCBox;
	QComboBox *resCBox;

	QProgressBar *frameratePBar;
	QSlider      *framerateSlider;

	QProgressBar *cachePBar;
	QToolButton  *plusCacheTBut;
	QToolButton  *minusCacheTBut;

	QComboBox *codecCBox;

	QComboBox *formatFWriterCBox;

	//Функция создания группы виджетов для настройки параметров видеоустройства.
	QGroupBox *createParamsWidgets();

	//Функция создания группы виджетов для настройки буферизации видеокадров.
	QGroupBox *createBufferingWidgets();

	//Функция создания группы виджетов для настройки параметров видеокодека.
	QGroupBox *createCodecWidgets();

	//Функция создания группы виджетов для настройки параметров записи в файл.
	QGroupBox *createFileWriterWidgets();

	//Функция обновления виджета параметров видеоустройства.
	void updateParamWidget(QHash<int, QVariant> hash, QVariant curvalue, QComboBox *cbox, bool sort = false);

private slots:
	//Слот загрузки параметров видеоустройства.
	void slotLoadParams();

	//Слот смены видеовхода.
	void slotInputActivated(int index);

	//Слот смены видеостандарта.
	void slotStandardActivated(int index);

	//Слот смены видеоформата.
	void slotPixFmtActivated(int index);

	//Слот смены видеоразрешения.
	void slotResolutionActivated(int index);

	//Слот увеличения кол-ва видеобуферов.
	void slotCachePlus();

	//Слот уменьшения кол-ва видеобуферов.
	void slotCacheMinus();

	//Слот смены максимального уровня кадрового периода.
	void slotMaxFramerateChange(int value);

	//Слот смены видеокодека.
	void slotCodecActivated(int index);

};

#endif
